
// var x = 1;

// function test(x, y = function () {
//   x = 3;
//   console.log(x);
// }) {
//   console.log(x); // 预编译第三步: 形实参 相统一 x => undefined 
//   var x = 2;
//   y(); // 参数作用域 y 执行 => 参数作用域x => 3 
//   console.log(x); // test 局部作用域 => 2
// }

// test();

// console.log(x); // 全局作用域x => 1



// ---------------------------------------



// var x = 1;

// function test(x, y = function () {
//   x = 3;
//   console.log(x);
// }) {
//   console.log(x); // 预编译第三步: 形实参 相统一 x => undefined 
//   y(); // 参数作用域 y 执行 => 参数作用域x => 3 
//   console.log(x); // 参数作用域x => 3 
// }

// test();

// console.log(x); // 全局作用域x => 1



// ---------------------------------------



// var x = 1;

// function test(a, y = function () {
//   x = 3;
//   console.log(x);
// }) {
//   console.log(x); // 预编译第二步： 保存局部变量 x 到AO -> 默认 undefined
//   var x = 2;
//   y(); // 全局作用域 => 3
//   console.log(x); // 局部作用域 => 2
// }

// test();

// console.log(x); // 通过参数 y 函数执行 全局的x => 3




// ---------------------------------------



var x = 1;

function yy () {
  x = 3;
  console.log(x);
}

function test(a, y = yy) {
  console.log(x); // undefined
  var x = 2;
  y(); // 相当于定义在 全局的yy函数 引用指向 -> 全局的 x => 3
  console.log(x); // 2
}

test();

console.log(x); // 3




/**
 * 从test 内部出发 -> 全局
 * 
 * test函数局部作用域 —>
 *   局部有没有这个东西 -> 没有 -> 找参数
 * 
 * test函数参数作用域(空间) —>
 *  参数有没有这个东西 -> 没有 -> 找全局
 * 
 * 全局作用域
 * 
 */


